home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 3: The Continuation / 17-Bit_The_Continuation_Disc.iso / amigan / amigan 20 / jimutils / winsize.a < prev   
Text File  |  1994-01-27  |  5KB  |  300 lines

  1. *
  2. *    WinSize - a window sizing utility
  3. *
  4. *    Copyright (c) 1987 by Limited Reality, Inc.
  5. *
  6. *    Author:    Jim Cooper
  7.  
  8. * Includes
  9. * ------------------------------------------------------------------------
  10.     include "exec/types.i"
  11.     include    "exec/exec_offsets.i"
  12.     include "intuition/intuition.i"
  13.     include    "libraries/dos_offsets.i"
  14.     include    "intuition/intuition_offsets.i"
  15.  
  16.     ifd    CAPE
  17.     EXEOBJ
  18.     objfile    'ram:WinSize'
  19.     endc
  20.  
  21. * Stack frame offsets
  22. * ------------------------------------------------------------------------
  23. count        EQU    -128
  24. IntBase     EQU    -124
  25. DOSBase     EQU    -120
  26. stdout        EQU    -116
  27. left        EQU    -112
  28. top        EQU    -108
  29. width        EQU    -104
  30. height        EQU    -100
  31. cmdline     EQU    -96
  32. buffer        EQU    -92
  33.  
  34. * On with the Program!
  35. * ------------------------------------------------------------------------
  36. WinSize:
  37.     link    a4,#-128
  38.     move.l    #$0fffffff,d0
  39.     move.l    d0,left(a4)
  40.     move.l    d0,top(a4)
  41.     move.l    d0,width(a4)
  42.     move.l    d0,height(a4)
  43.     move.l    a0,cmdline(a4)
  44.     lea.l    DOSName(PC),a1
  45.     move.l    #LIBRARY_VERSION,d0
  46.     move.l    _AbsExecBase,a6
  47.     Call    OpenLibrary
  48.     move.l    d0,DOSBase(a4)
  49.     move.l    d0,a6
  50.     Call    Output
  51.     move.l    d0,stdout(a4)
  52.     move.l    cmdline(a4),a0
  53.     cmpi.b    #'?',(a0)
  54.     bne.s    NoHelp
  55.     move.l    stdout(a4),d1
  56.     move.l    #Help,d2
  57.     move.l    #HelpLen,d3
  58.     Call    Write
  59.     unlk    a4
  60.     rts
  61. NoHelp:
  62.     move.l    #IntName,a1
  63.     moveq    #0,d0
  64.     move.l    _AbsExecBase,a6
  65.     Call    OpenLibrary
  66.     move.l    d0,IntBase(a4)
  67.     bne.s    IntOk
  68.     move.l    stdout(a4),d1
  69.     move.l    #NoInt,d2
  70.     move.l    #NoIntLen,d3
  71.     move.l    DOSBase(a4),a6
  72.     Call    Write
  73.     unlk    a4
  74.     rts
  75. IntOk:
  76.     move.l    cmdline(a4),a0
  77.     moveq    #0,d0
  78.     move.b    (a0),d0
  79.     andi.b    #95,d0
  80.     cmpi.b    #'S',d0
  81.     bne.s    NoShow
  82.     move.l    IntBase(a4),a5
  83.     move.l    ib_ActiveWindow(a5),a0
  84.     move.w    wd_LeftEdge(a0),d0
  85.     move.l    d0,left(a4)
  86.     move.w    wd_TopEdge(a0),d0
  87.     move.l    d0,top(a4)
  88.     move.w    wd_Width(a0),d0
  89.     move.l    d0,width(a4)
  90.     move.w    wd_Height(a0),d0
  91.     move.l    d0,height(a4)
  92.     lea    Format(pc),a0
  93.     lea    left(a4),a1
  94.     lea    store(pc),a2
  95.     lea    buffer(a4),a3
  96.     Call    RawDoFmt
  97.     bsr    Print
  98.     unlk    a4
  99.     rts
  100. NoShow:
  101.     cmpi.b    #' ',(a0)
  102.     blt.s    RangeChk
  103.     bsr    atoi
  104.     move.l    d0,left(a4)
  105.     cmpi.b    #' ',d1
  106.     blt.s    Arrggh
  107.     bsr    atoi
  108.     move.l    d0,top(a4)
  109.     cmpi.b    #' ',d1
  110.     blt.s    Arrggh
  111.     bsr    atoi
  112.     move.l    d0,width(a4)
  113.     cmpi.b    #' ',d1
  114.     blt.s    Arrggh
  115.     bsr    atoi
  116.     move.l    d0,height(a4)
  117.     bra.s    RangeChk
  118. Arrggh:
  119.     move.l    stdout(a4),d1
  120.     move.l    #BadArgs,d2
  121.     move.l    #BadArgLen,d3
  122.     move.l    DOSBase(a4),a6
  123.     Call    Write
  124.     unlk    a4
  125.     rts
  126. RangeChk:
  127.     move.l    IntBase(a4),a5
  128.     move.l    ib_ActiveWindow(a5),a0
  129.     move.l    ib_ActiveScreen(a5),a5
  130.     moveq    #0,d0
  131.     move.w    sc_Width(a5),d0
  132.     move.l    width(a4),d1
  133.     cmp.l    d0,d1
  134.     ble.s    RC1
  135.     move.l    d0,width(a4)
  136.     move.l    d0,d1
  137. RC1:
  138.     move.w    wd_MaxWidth(a0),d0
  139.     cmp.l    d0,d1
  140.     bls.s    RC2
  141.     move.w    d1,wd_MaxWidth(a0)
  142. RC2:
  143.     move.w    wd_MinWidth(a0),d0
  144.     cmp.l    d0,d1
  145.     bge.s    RC3
  146.     move.l    d0,width(a4)
  147. RC3:
  148.     move.l    height(a4),d1
  149.     move.w    sc_Height(a5),d0
  150.     cmp.l    d0,d1
  151.     ble.s    RC4
  152.     move.l    d0,height(a4)
  153.     move.l    d0,d1
  154. RC4:
  155.     move.w    wd_MaxHeight(a0),d0
  156.     cmp.l    d0,d1
  157.     bls.s    RC5
  158.     move.w    d1,wd_MaxHeight(a0)
  159. RC5:
  160.     move.w    wd_MinHeight(a0),d0
  161.     cmp.l    d0,d1
  162.     bge.s    RC6
  163.     move.l    d0,height(a4)
  164. RC6:
  165.     move.l    left(a4),d1
  166.     move.l    width(a4),d2
  167.     move.w    sc_Width(a5),d0
  168.     sub.l    d2,d0
  169.     cmp.l    d0,d1
  170.     ble.s    RC7
  171.     move.l    d0,left(a4)
  172. RC7:
  173.     move.l    top(a4),d1
  174.     move.l    height(a4),d2
  175.     moveq    #0,d0
  176.     move.w    sc_Height(a5),d0
  177.     sub.l    d2,d0
  178.     cmp.l    d0,d1
  179.     ble.s    DoIt
  180.     move.l    d0,top(a4)
  181. DoIt:
  182.     move.l    IntBase(a4),a6
  183.     move.l    left(a4),d1
  184.     move.w    wd_LeftEdge(a0),d0
  185.     cmp.l    d0,d1
  186.     blt.s    MoveFirst
  187.     move.l    top(a4),d1
  188.     move.w    wd_TopEdge(a0),d0
  189.     cmp.l    d0,d1
  190.     bge.s    SizeFirst
  191. MoveFirst:
  192.     bsr    MoveIt
  193.     bsr.s    SizeIt
  194.     bra.s    DoDisp
  195. SizeFirst:
  196.     bsr.s    SizeIt
  197.     bsr    MoveIt
  198. DoDisp:
  199.     Call    RethinkDisplay
  200.     move.l    a6,a1
  201.     move.l    _AbsExecBase,a6
  202.     Call    CloseLibrary
  203.     move.l    DOSBase(a4),a1
  204.     Call    CloseLibrary
  205.     unlk    a4
  206.     rts
  207.  
  208. * Subroutines
  209. * -----------------------------------------------------------------------
  210. atoi:
  211.     moveq    #0,d0
  212.     move.l    d0,d1
  213. asplp:
  214.     move.b    (a0),d1
  215.     cmpi.b    #' ',d1
  216.     bne.s    aloop
  217.     addq.l    #1,a0
  218.     bra.s    asplp
  219. aloop:
  220.     move.b    (a0)+,d1
  221.     beq.s    afini
  222.     cmpi.b    #'-',d1
  223.     beq.s    aloop
  224.     cmpi.b    #'0',d1
  225.     blt.s    afini
  226.     cmpi.b    #'9',d1
  227.     bgt.s    afini
  228.     subi.b    #'0',d1
  229.     mulu    #10,d0
  230.     add.l    d1,d0
  231.     bra.s    aloop
  232. afini:
  233.     andi.l    #$0fffffff,d0        ; "fix" for max sizes, and "kill" neg.
  234.     rts
  235.  
  236. SizeIt:
  237.     move.l    width(a4),d0
  238.     moveq    #0,d2
  239.     move.w    wd_Width(a0),d2
  240.     sub.l    d2,d0
  241.     move.l    height(a4),d1
  242.     move.w    wd_Height(a0),d2
  243.     sub.l    d2,d1
  244.     Call    SizeWindow
  245.     rts
  246.  
  247. MoveIt:
  248.     move.l    left(a4),d0
  249.     moveq    #0,d2
  250.     move.w    wd_LeftEdge(a0),d2
  251.     sub.l    d2,d0
  252.     move.l    top(a4),d1
  253.     move.w    wd_TopEdge(a0),d2
  254.     sub.l    d2,d1
  255.     Call    MoveWindow
  256.     rts
  257.  
  258. Print:
  259.     move.l    #buffer,d2
  260.     add.l    a4,d2
  261.     move.l    d2,a0
  262. plp:
  263.     tst.b    (a0)+
  264.     bne.s    plp
  265.     move.l    a0,d3
  266.     sub.l    d2,d3
  267.     move.l    stdout(a4),d1
  268.     move.l    DOSBase(a4),a6
  269.     Call    Write
  270.     rts
  271.  
  272. store:
  273.     move.b    d0,(a3)+
  274.     rts
  275.  
  276. * Data
  277. * -----------------------------------------------------------------------
  278. IntName:
  279.     DC.B    'intuition.library',0
  280. DOSName:
  281.     DC.B    'dos.library',0
  282.  
  283. BadArgs:
  284.     DC.B    'Bad Arguments!',10,10
  285. Help:
  286.     DC.B    'Usage: WinSize [leftedge topedge width height]',10
  287.     DC.B    '       WinSize s to show current size',10
  288. HelpLen EQU    *-Help
  289. BadArgLen EQU    *-BadArgs
  290.  
  291. NoInt:
  292.     DC.B    'Couldn''t open Intuition!!!',10
  293. NoIntLen EQU    *-NoInt
  294.  
  295. Format:
  296.     DC.B    'Current parameters: '
  297.     DC.B    'left %ld, top %ld, width %ld, height %ld.',10,0
  298.  
  299.     end
  300.